/*-----------------------------------------------------------------------
|                            FILE DESCRIPTION                           |
-----------------------------------------------------------------------*/
/*----------------------------------------------------------------------
  - File name     : main.c
  - Author        : zeweni
  - Update date   : 2020.01.11
  -	Copyright(C)  : 2020-2021 zeweni. All rights reserved.
-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------
|                               INCLUDES                                |
-----------------------------------------------------------------------*/
#include "main.h"
#include "AntOS.h"

/*-----------------------------------------------------------------------
|                                 DATA                                  |
-----------------------------------------------------------------------*/

#define THR_STACK_SIZE (24)

volatile OS_Thread_t thread1 ;  //定义线程1的指针句柄
volatile OS_Thread_t thread2 ;  //定义线程2的指针句柄
volatile OS_Thread_t thread3 ;  //定义线程3的指针句柄
volatile OS_Thread_t thread4 ;  //定义线程4的指针句柄
volatile OS_Thread_t thread5 ;  //定义线程5的指针句柄

OS_Thread_Stk *Stack1_Addr;  //定义线程1的堆栈指针句柄
OS_Thread_Stk *Stack2_Addr;  //定义线程2的堆栈指针句柄
OS_Thread_Stk *Stack3_Addr;  //定义线程3的堆栈指针句柄
OS_Thread_Stk *Stack4_Addr;  //定义线程4的堆栈指针句柄
OS_Thread_Stk *Stack5_Addr;  //定义线程5的堆栈指针句柄

/*-----------------------------------------------------------------------
|                               FUNCTION                                |
-----------------------------------------------------------------------*/


/**
 * @brief     线程1的入口函数。
 * @details   Entry function of thread 5.
 * @param[in] param 线程5的入口参数。
 * @return    None
**/
void Thread1_Entry(void * param)
{
	static os_uint8_t *ptr;
	ptr = param;

	while(1)
	{
		if(*ptr == 1)P21 = !P21;
		
		AntOS_Thread_Sleep(10);
	}
}


/**
 * @brief     线程2的入口函数。
 * @details   Entry function of thread 5.
 * @param[in] param 线程5的入口参数。
 * @return    None
**/
void Thread2_Entry(void * param)
{
	param = param;
	while(1)
	{
		P22 = !P22;
		AntOS_Thread_Sleep(10);
	}
}


/**
 * @brief     线程3的入口函数。
 * @details   Entry function of thread 5.
 * @param[in] param 线程5的入口参数。
 * @return    None
**/
void Thread3_Entry(void * param) 
{	
	param = param;
	
	while(1)
	{
		P23 = !P23;
		AntOS_Thread_Sleep(10);
	}
}


/**
 * @brief     线程4的入口函数。
 * @details   Entry function of thread 5.
 * @param[in] param 线程5的入口参数。
 * @return    None
**/
void Thread4_Entry(void * param)
{
	param = param;
	
	while(1)
	{
		P24 = !P24;
		AntOS_Thread_Sleep(10);

	}
}


/**
 * @brief     线程5的入口函数。
 * @details   Entry function of thread 5.
 * @param[in] param 线程5的入口参数。
 * @return    None
**/
void Thread5_Entry(void * param)
{
	param = param;
    
	while(1)
	{
		P25 = !P25;
		AntOS_Thread_Sleep(10);
		
	}
}


/**
 * @brief   AntOS提供的主函数，用于注册线程和其他操作。
 * @details The main function provided by AntOS 
 *          is used to register threads.
 * @param   None
 * @return  None
**/
void AntOS_Main(void)
{
	static os_uint8_t i = 0;
	i = 1;

	OS_CREATE_THREAD(thread1,  /*!< 线程1的指针句柄，不可重复。 */
					 1,           /*!< 线程1的ID号，不可重复。 */
					 Thread1_Entry,   /*!< 线程1入口函数地址。 */
					 &i,                   /*!< 线程1的传参。 */
					 1,                    /*!< 线程1优先级。 */
					 Stack1_Addr,   /*!< 返回线程1的堆栈地址。 */
					 THR_STACK_SIZE,     /*!< 线程1堆栈大小。 */
					 100);            /*!< 线程1的运行时间片。 */

	OS_CREATE_THREAD(thread2, 2, Thread2_Entry, OS_NULL, 2, Stack2_Addr, THR_STACK_SIZE, 100);

	OS_CREATE_THREAD(thread3, 3, Thread3_Entry, OS_NULL, 3, Stack3_Addr, THR_STACK_SIZE, 100);

	OS_CREATE_THREAD(thread4, 4, Thread4_Entry, OS_NULL, 4, Stack4_Addr, THR_STACK_SIZE, 100);

	OS_CREATE_THREAD(thread5, 5, Thread5_Entry, OS_NULL, 5, Stack5_Addr, THR_STACK_SIZE, 100);

}


/**
 * @brief   main函数
 * @param   None
 * @return  None
**/
int main(void)
{
	return 0;
}


/*-----------------------------------------------------------------------
|                   END OF FLIE.  (C) COPYRIGHT zeweni                  |
-----------------------------------------------------------------------*/



